package com.itheima.chap02;

import java.util.Scanner;

public class Employee {
    // 底薪
    private int baseSalary;
    // 奖金
    private int bonus;// 底薪和奖金是属于员工（/对象本身）的属性，直接定义好

    /**
     * 构造方法
     * 1.没有返回值
     * 2.方法名与类名完全一致
     */

    public Employee(int baseSalary,int bonus){
        setBaseSalary(baseSalary);
        setBonus(bonus);
    }
    public int caculateSalary(char grade) {   //grade是发生变化的，所以定义成参数
        // 1.计算奖金系数
        double rate = calculateRate(grade);
        // 2.计算薪资
        return baseSalary + (int)(bonus * rate);
    }

    private double calculateRate(char grade){
        return switch (grade){
            case 'A' -> 1.0;
            case 'B' -> 0.8;
            case 'C' -> 0.6;
            case 'D' -> 0.4;
            case 'E' -> 0.2;
            default -> 0;
        };
    }


    private void setBaseSalary(int baseSalary){
        if(baseSalary < 0) {
            throw new IllegalArgumentException("底薪不能小于0");
        }
        // this.代表的是当前对象，访问的是当前对象的成员
        this.baseSalary = baseSalary;
    }

    private int getBaseSalary() {
            return baseSalary;
    }

    private void setBonus(int bonus) {
        if(bonus < 0) {
            throw new IllegalArgumentException("奖金不能小于0");
        }
        this.bonus = bonus;
    }

    private int getBonus() {
        return bonus;
    }

}

// 不用直接在main里面调用的方法，为了降低耦合，减小修改时引起的连锁性反应，可以用private将方法藏起来，拒绝多余的调用